package com.memento;

import java.io.*;

/*
    任何继承该类的类都将获得深拷贝的能力
 */
public abstract class SerializableDTO {

    public SerializableDTO () {}

    // Cloneable默认浅拷贝，无法对（一对一或一对多对象）成员变量进行深拷贝。可以实现序列化接口达到深拷贝效果
    public Object clone() {
        ByteArrayOutputStream b = new ByteArrayOutputStream();
        try {
            // 将对象本身序列化到字节流
            ObjectOutputStream obj_out = new ObjectOutputStream(b);
            obj_out.writeObject(this);
            // 再将字节流反序列化得到对象副本
            ObjectInputStream obj_in = new ObjectInputStream(new ByteArrayInputStream(b.toByteArray()));
            return obj_in.readObject();
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
        return null;
    }

}
